package com.rf.richfitwheel.workflow.service;

import com.rf.richfitwheel.workflow.model.TaskPortalTodoSync;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;

import java.util.List;

/**
 * @author hushouquan
 */
public interface PortalTodoSync{
    /**
     * 同步待办任务
     * @param processInstance   流程实例
     * @param moduleType 模块，必须要传，用来决定appId的
     * @param startUserId 发起人id
     */
    void todoSync(ProcessInstance processInstance, String moduleType, String startUserId, List<TaskPortalTodoSync> taskListNew);
    
    /**
     * 修改待办任务
     * @param processInstance 流程实例
     * @param moduleType 模块，必须要传，用来决定appId的
     * @param startUserId 发起人id
     */
    void runSyncUpdate(ProcessInstance processInstance, String moduleType, String startUserId, List<TaskPortalTodoSync> taskListNew);
    
    /**
     * 第一个节点处理
     * @param processInstance 流程实例
     * @param taskFirst 第一个节点任务
     * @param moduleType 模块，必须要传，用来决定appId的
     * @param startUserId 发起人id
     */
    void todoSyncFirst(ProcessInstance processInstance, Task taskFirst, String moduleType, String startUserId);
    
    /**
     * 删除待办任务
     * @param taskOld 任务
     * @param receiveUsers 要删除的任务办理人
     * @param moduleType 模块，必须要传，用来决定appId的
     */
    void todoSyncDelete(Task taskOld, List<String> receiveUsers, String moduleType);
    
    /**
     * 待办待阅数据置为已办或已阅
     * @param taskOld 任务
     * @param receiveUsers 需要置为已办的人员
     * @param moduleType 模块，必须要传，用来决定appId的
     */
    void todoSyncDone(Task taskOld, List<String> receiveUsers, String moduleType);
    
    /**
     * 统一任务编号下的先删除待办在新增待办，签出、签入的情况
     * @param processInstance 流程实例
     * @param taskOld 流程任务
     * @param receiveUsers 要删除的接收人
     * @param moduleType 模块，必须要传，用来决定appId的
     * @param startUserId 发起人
     * @param taskListNew 新的任务
     */
    void runDeleteAndNew(ProcessInstance processInstance, Task taskOld, List<String> receiveUsers, String moduleType, String startUserId, List<TaskPortalTodoSync> taskListNew);
}
